﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FTools.Dominio;
using FTools.Persistencia;
using System.Data.SqlClient;
using System.Collections;
using FTools.Interface;
using FTools.Generico;

namespace FTools.Comunicacion
{
    class ComCiudad : InterfaceCiudad
    {
        Conexion objConexion = new Conexion();
        SqlConnection conexion;
        SqlTransaction transaccion = null;
        PerCiudad objPerCiudad = new PerCiudad();

        public Ciudad obtenerCiudad(long xIdCiudad)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Ciudad objCiudad = objPerCiudad.obtenerCiudad(conexion, transaccion, xIdCiudad);
                transaccion.Commit();
                return objCiudad;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existeCiudad(long xIdCiudad)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerCiudad.existeCiudad(conexion, transaccion, xIdCiudad);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existeCiudad(String xNombre, long xIdDepartamento)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerCiudad.existeCiudad(conexion, transaccion, xNombre, xIdDepartamento);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public ArrayList obtenerColeccionCiudad(long xIdDepartamento)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colCiudad = objPerCiudad.obtenerColeccionCiudad(conexion, transaccion, xIdDepartamento);
                transaccion.Commit();
                return colCiudad;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int altaCiudad(Ciudad xObjCiudad)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                xObjCiudad.IdCiudad = FuncionesGenericas.generarNumerador("CIUDAD");
                int nro = objPerCiudad.altaCiudad(conexion, transaccion, xObjCiudad);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int bajaCiudad(Ciudad xObjCiudad)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                int nro = objPerCiudad.bajaCiudad(conexion, transaccion, xObjCiudad);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int modificaCiudad(Ciudad xObjCiudad)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                int nro = objPerCiudad.modificaCiudad(conexion, transaccion, xObjCiudad);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }
    }
}
